/***************************************************
 @Name :        1196kk0
 @Time :        2025-05-26
 @Email :       2232506563@qq.com
 @Comment :     读取SHT20数据
 @FileName :    drv_IIC_SHT20.c
 @Version :     4.0
****************************************************/

#include "drv_IIC_SHT20.h"

/********* 全局变量 *********/
SHT20_val tem_hum_data;     //温度数据
uint8_t tim7_flg = 0;       //中断标志

/**************************************************
函数名称：drv_IIC_SHT20_Config
函数功能：IIC初始化
输入参数：无
输出参数：无
其它说明：
***************************************************/
void drv_IIC_SHT20_Config(void)
{
    drv_IIC_Config();
}

/**************************************************
函数名称：drv_SHT20_read_temp
函数功能：读取sht20传感器的温度采集值
输入参数：无
输出参数：返回采集到的值
其它说明：
***************************************************/
uint16_t drv_SHT20_read_temp(void)
{
    uint8_t data[2];
    uint16_t ret = 0;
    drv_IIC_start();
    drv_IIC_sendData(0x80);
    if (drv_IIC_waitACK() != ACK)
    {
        drv_IIC_end();
        return NOACK;
    }
    drv_IIC_sendData(0xe3);     //获取温度
    if (drv_IIC_waitACK() != ACK)
    {
        drv_IIC_end();
        return NOACK;
    }
    drv_IIC_start();
    drv_IIC_sendData(0x81);
    if (drv_IIC_waitACK() != ACK)
    {
        drv_IIC_end();
        return NOACK;
    }
    delay_ms(85);
    data[0] = drv_IIC_readData(ACK);    //高8位数据
    data[1] = drv_IIC_readData(NOACK);  //低8位数据
    drv_IIC_end();
    ret = ((data[0] << 8) | data[1]);
    return ret;
}

/**************************************************
函数名称：drv_SHT20_read_hum
函数功能：读取sht20传感器的湿度采集值
输入参数：无
输出参数：返回采集到的值
其它说明：
***************************************************/
uint16_t drv_SHT20_read_hum(void)
{
    uint8_t data[2];
    uint16_t ret = 0;
    drv_IIC_start();
    drv_IIC_sendData(0x80);
    if (drv_IIC_waitACK() != ACK)
    {
        drv_IIC_end();
        return NOACK;
    }
    drv_IIC_sendData(0xe5);     //获取湿度
    if (drv_IIC_waitACK() != ACK)
    {
        drv_IIC_end();
        return NOACK;
    }
    drv_IIC_start();
    drv_IIC_sendData(0x81);
    if (drv_IIC_waitACK() != ACK)
    {
        drv_IIC_end();
        return NOACK;
    }
    delay_ms(85);
    data[0] = drv_IIC_readData(ACK);    //高8位数据
    data[1] = drv_IIC_readData(NOACK);  //低8位数据
    drv_IIC_end();
    ret = ((data[0] << 8) | data[1]);
    return ret;
}

/**************************************************
函数名称：drv_SHT20_reset
函数功能：复位sht20传感器
输入参数：无
输出参数：应答信号
其它说明：
***************************************************/
uint8_t drv_SHT20_reset(void)
{
    drv_IIC_start();
    drv_IIC_sendData(0x80);
    if (drv_IIC_waitACK() != ACK)
    {
        drv_IIC_end();
        return NOACK;
    }
    drv_IIC_sendData(0xfe);     //复位命令
    if (drv_IIC_waitACK() != ACK)
    {
        drv_IIC_end();
        return NOACK;
    }
    drv_IIC_end();
    return 0;
}

/**************************************************
函数名称：drv_SHT20_get_temp
函数功能：将传感器的温度采集值换算为实际值
输入参数：无
输出参数：换算后的实际值
其它说明：换算公式 实际值= -46.85+175.72*((float)采集值/65536)
***************************************************/
float drv_SHT20_get_temp(void)
{
    uint16_t temp = 0;
    temp = drv_SHT20_read_temp();
    tem_hum_data.tem = -46.85 + 175.72 * ((float)temp / 65536);
    return tem_hum_data.tem;
}

/**************************************************
函数名称：drv_SHT20_get_hum
函数功能：将传感器的湿度采集值换算为实际值
输入参数：无
输出参数：换算后的实际值
其它说明：换算公式 实际值= -6.0+125.0*((float)采集值/65536)
***************************************************/
float drv_SHT20_get_hum(void)
{
    uint16_t hum = 0;
    hum = drv_SHT20_read_hum();
    tem_hum_data.hum =  -6.0 + 125.0 *((float)hum / 65536);
    return tem_hum_data.hum;
}

/**************************************************
函数名称：Get_Cur_Temp_Hum
函数功能：获取实时温湿度
输入参数：无
输出参数：无
其它说明：
***************************************************/
void Get_Cur_Temp_Hum(void)
{ 
    tem_hum_data.tem = drv_SHT20_get_temp();
    tem_hum_data.hum = drv_SHT20_get_hum();
    tim7_flg = 1;
}




